perm filename VIXFAI.FAI[VIS,HPM]15 blob
sn#501223 filedate 1980-03-06 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00022 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 TITLE VIXFAI
C00004 00003 X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D ↔ BT←ARRY2
C00008 00004 GRYUP: 0
C00009 00005 TONUP: 0
C00010 00006 TABLES FOR FRACTIONATING ERRORS FOR THE HALFTONE ALGORITHM
C00013 00007 TITLE VIXFA1
C00016 00008 TONUP: 0
C00019 00009 ******************** SAIL INTERFACE ***********************
C00023 00010 ARRY←5 ↔ X1←1 ↔ Y1←2 ↔ X2←3 ↔ Y2←4 ↔ BT←0 ↔ XA←6 ↔ YA←7
C00029 00011 TITLE VIDONE
C00033 00012 TITLE VIDFOR
C00036 00013 TITLE VID1
C00038 00014 TITLE VID3
C00041 00015 TITLE VID4
C00044 00016 TITLE VID5
C00047 00017 TITLE VIDFRX
C00050 00018 TITLE VIDFGX
C00054 00019 TITLE VIDFRT
C00058 00020 TITLE VIDXGP
C00061 00021 TITLE VIDXG
C00064 00022 TITLE XGEROR
C00065 ENDMK
C⊗;
TITLE VIXFAI
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VID
DWINXL: 0
DWINYL: 0
DWINXH: 20*40-2
DWINYH: 740-1
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
T←1 ↔ TT←2 ↔ TTT←3 ↔ ARRY1←4 ↔ ARRY2←5 ↔ P←17
A←6 ↔ B←7 ↔ C←10 ↔ D←11 ↔ E←13 ↔ F←14 ↔ G←15
RETAD: 0
TEMP: BLOCK 25 ;TEMPORARY STORAGE FOR STUFF
DEFINE FLOAT(N)
< TLC N,232000
FADR N,N >
OPDEF FIX[247000233000]
X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D ↔ BT←ARRY2
THIS←←TT ↔ SIZ←←TTT
XCNTR←←TEMP ↔ YCNTR←←TEMP+1 ↔ DELX←←TEMP+2 ↔ DELY←←TEMP+3
PICX←←TEMP+4 ↔ PICY←←TEMP+5 ↔ DDLIN←←TEMP+6 ↔ LINB←←TEMP+7
VID: POP P,RETAD ;PUT UP BITS BT (A MASK, USUALLY ONLY ONE BIT
POP P,BT ;IS ON, IF MULTIPLE BITS ARE ON, THEY ARE OR'D)
POP P,ARRY1 ;OF PICTURE PIC INTO DD RECTANGLE X1-X2,Y1-Y2
POP P,Y2 ; VIDEO(X1,Y1,X2,Y2,PIC,BT)
FSBR Y2,YH ;IF BT IS -1,
FMPR Y2,YSC ;PUT UP A RANDOM DOT REPRESENTATION INSTEAD
FIX Y2,
POP P,X2
FSBR X2,XL
FMPR X2,XSC
FIX X2,
POP P,Y1
FSBR Y1,YH
FMPR Y1,YSC
FIX Y1,
POP P,X1
FSBR X1,XL
FMPR X1,XSC
FIX X1,
CAML X1,X2 ;PUT UP THE BITS MASKED BY BT
EXCH X1,X2 ;OF PICTURE ARRY IN DD BUFFER
CAML Y1,Y2 ;RECTANGLE X1-X2, Y1-Y2
EXCH Y1,Y2
HRREI T,1(X2) ;CALCULATE WIDTH AND HEIGHT,
SUB T,X1 ;IN DATA DISC PIXELS,
MOVEM T,XCNTR ;OF THE FULL PICTURE
HRREI T,1(Y2)
SUB T,Y1 ;THEN CALCULATE THE
MOVEM T,YCNTR ;STEP SIZE THROUGH THE ORIGINAL
HRLZ T,LNBY(ARRY1) ;PICTURE EACH DD PIXEL REPRESENTS,
IDIV T,XCNTR ;AS A FIXED POINT WRD WITH THE
MOVEM T,DELX ;RADIX POINT IN THE MIDDLE
HRLZ T,PCLN(ARRY1)
IDIV T,YCNTR
MOVEM T,DELY
SETZ PICY
CAML Y1,DWINYL ;CHECK IF LOWER AND UPPER
JRST YLOK
MOVN T,Y1 ;BOUNDS OF THE IMAGE EXCEED THE
IMUL T,DELY ;EXTERNAL WINDOWING CONSTRAINTS
MOVEM T,PICY
MOVE Y1,DWINYL
YLOK: CAMLE Y2,DWINYH
MOVE Y2,DWINYH
SETZ PICX
CAML X1,DWINXL
JRST XLOK
MOVN T,X1
IMUL T,DELX
MOVEM T,PICX
MOVE X1,DWINXL
XLOK: CAMLE X2,DWINXH
MOVE X2,DWINXH
CAMG X1,X2 ;IF THIS PROCESS LEAVES NOTHING,
CAMLE Y1,Y2 ;WE CAN QUIT
JRST @RETAD
SUBM X1,X2 ;GENERATE LOOP COUNTERS
SUBM Y1,Y2
HRLI X1,-1(X2)
HRLI Y1,-1(Y2)
HLRE SIZ,Y1
MOVN SIZ,SIZ ;RESERVE SPACE FOR BYTE PNTR TABLE
PUSHJ P,CORGET
HALT
MOVEM THIS,DDLIN
MOVE E,DELY
MOVE T,Y1 ;GENERATE TABLE OF LINE ADDRESSES
HRR T,DDLIN
HRLZI TT,LINTAB(ARRY1)
ADD TT,PICY
YLLP: HLRZ TTT,TT ;INTO THE ACTUAL PICTURE COLUMNS WHICH
RTF: MOVE TTT,(TTT) ;CORRESPOND TO DD COLUMNS
MOVEM TTT,(T)
ADD TT,E
AOBJN T,YLLP
CAMN BT,[-1]
JRST [ JSR TONUP
JRST DONE ]
CAMN BT,[-2]
JRST [ JSR HAFUP
JRST DONE ]
JSR GRYUP
DONE: MOVE THIS,DDLIN
PUSHJ P,CORREL
JRST @RETAD
GRYUP: 0
HRRM BT,TI
MOVN T,Y1
ADD T,DDLIN
HRRM T,YLP
HRLZ E,BPTAB(ARRY1)
ADD E,PICX
XLP: HRRZ T,X1
LSH T,-5
ADD T,[ORM F,DBUF(TT)]
HRRM T,TJ
HRRZ F,X1
ANDI F,37
MOVE F,BSK(F)
MOVE T,Y1
HLRZ TTT,E
MOVE TTT,(TTT)
TLO TTT,TT ;SET UP INDEX FIELD IN BYTE PNTR
YLP: MOVE TT,(T) ;ALTERED TO REFERENCE THE DDLIN TABLE
LDB 0,TTT
MOVE TT,SLINE(T)
TI: TRNE 0,BT ;REPLACED BY ACTUAL MASK
TJ: ORM F,DBUF(TT) ;ADD WORD NUMBER WITHIN SCANLINE
AOBJN T,YLP
ADD E,DELX
AOBJN X1,XLP
JRST @GRYUP
TONUP: 0
MOVN BT,BYBI(ARRY1)
SUBI BT,1
HRRM BT,TI1
MOVEI BT,77753
MOVN T,Y1
ADD T,DDLIN
HRRM T,YLP1
HRLZ E,BPTAB(ARRY1)
ADD E,PICX
XLP1: HRRZ T,X1
LSH T,-5
ADD T,[ORM F,DBUF(TT)]
HRRM T,TJ1
HRRZ F,X1
ANDI F,37
MOVE F,BSK(F)
MOVE T,Y1
HLRZ TTT,E
MOVE TTT,(TTT)
TLO TTT,TT ;SET UP INDEX FIELD IN BYTE PNTR
YLP1: MOVE TT,(T) ;ALTERED TO REFERENCE THE DDLIN TABLE
LDB 0,TTT
MOVE TT,SLINE(T)
TI1: ROT 0,-5 ;REPLACED BY ACTUAL MASK
IMULI BT,400003
CAMLE 0,BT
TJ1: ORM F,DBUF(TT) ;ADD WORD NUMBER WITHIN SCANLINE
AOBJN T,YLP1
ADD E,DELX
AOBJN X1,XLP1
JRST @TONUP
;TABLES FOR FRACTIONATING ERRORS FOR THE HALFTONE ALGORITHM
FOR I←-20,-1,1 { (3*I+10)/20
}
T1: FOR I←0,40,1 { (3*I+10)/20
}
FOR I←-20,-1,1 { (5*I+10)/20
}
T2: FOR I←0,40,1 { (5*I+10)/20
}
FOR I←-20,-1,1 { (I+10)/20
}
T3: FOR I←0,40,1 { (I+10)/20
}
FOR I←-20,-1,1 {I-(((3*I+10)/20)+((5*I+10)/20)+((I+10)/20))
}
T4: FOR I←0,40,1 {I-(((3*I+10)/20)+((5*I+10)/20)+((I+10)/20))
}
HAFUP: 0 ;HIGH QUALITY HALFTONES
HLRE SIZ,Y1
MOVN SIZ,SIZ
ADDI SIZ,2
PUSHJ P,CORGET
HALT
SETZ (THIS) ;RESERVE AND CLEAR A
HRL 0,THIS ;LINE BUFFER
HRRI 0,1(THIS)
MOVEI T,-1(THIS)
ADD T,SIZ
BLT 0,(T)
MOVEM THIS,LINB ;CREATE REFERENCES TO THE
SUBI THIS,(Y1) ;LINE BUFFER
HRRM THIS,LBM1
ADDI THIS,1
HRRM THIS,LB
ADDI THIS,1
HRRM THIS,LBP1
MOVN T,Y1
ADD T,DDLIN
HRRM T,YLP2
MOVN T,BYBI(ARRY1) ;SET UP SHIFT COUNT
ADDI T,4 ;FOR REDUCTION OF PIXELS
HRRM T,SHIF ;TO FOUR BITS
HRLZ E,BPTAB(ARRY1)
ADD E,PICX
XLP2: HRRZ T,X1
LSH T,-5
ADD T,[ORM F,DBUF(TT)]
HRRM T,TJ2
HRRZ F,X1
ANDI F,37
MOVE F,BSK(F)
MOVE T,Y1
HLRZ TTT,E
MOVE TTT,(TTT)
TLO TTT,TT ;SET UP INDEX FIELD IN BYTE PNTR
SETZB C,D
YLP2: MOVE TT,(T) ;ALTERED TO REFERENCE THE DDLIN TABLE
LDB 0,TTT
SHIF: LSH 0,0 ;STRIP IT TO FOUR BITS
ADD C,0
ADD C,D
CAIGE C,10
JRST NOTDOT
MOVE TT,SLINE(T)
TJ2: ORM F,DBUF(TT) ;ADD WORD NUMBER WITHIN SCANLINE
SUBI C,17
NOTDOT: CAMGE C,[-20]
FOOL: MOVE C,[-20]
CAILE C,40
FOOG: MOVEI C,40
MOVE D,T4(C)
MOVE 0,T1(C)
LBM1: ADDM 0,-1(T) ;CHANGED TO LINE BUFFER-1
MOVE 0,T2(C)
LB: ADDM 0,(T) ;CHANGED TO LINE BUFFER
MOVE C,T3(C)
LBP1: EXCH C,1(T) ;CHANGED TO LINE BUFFER+1
AOBJN T,YLP2
ADD E,DELX
AOBJN X1,XLP2
MOVE THIS,LINB
PUSHJ P,CORREL
JRST @HAFUP
PRGEND
TITLE VIXFA1
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VIDEO
ARRY←5 ↔ X1←1 ↔ Y1←2 ↔ X2←3 ↔ Y2←4 ↔ BT←0 ↔ XA←6 ↔ YA←7
DX←10 ↔ DY←11 ↔ PICX←12 ↔ PICY←13 ↔ XBIT←14 ↔ XPIC←15 ↔ YPIC←16 ↔ T←17
SCRTCH: BLOCK 1000
GRYUP: 0
MOVE T,ROWTAB
HRRM T,RTF
MOVE T,COLTAB
HRRM T,CTF
HRRM BT,TI
CAML X1,X2 ;PUT UP THE BITS MASKED BY BT
EXCH X1,X2 ;OF PICTURE ARRY IN DD BUFFER
CAML Y1,Y2 ;RECTANGLE X1-X2, Y1-Y2
EXCH Y1,Y2
HRREI XA,1(X2)
SUB XA,X1
HRREI YA,1(Y2)
SUB YA,Y1
HRLZ DX,PICWID
IDIV DX,XA
HRLZ DY,PICHIG
IDIV DY,YA
SETZB PICY,PICX
JUMPGE Y1,YLOK ;CHECK IF LOWER AND UPPER
MOVN PICY,Y1 ;BOUNDS NEED FIXING UP
IMUL PICY,DY
SETZ Y1,
YLOK: CAILE Y2,737
MOVEI Y2,737
JUMPGE X1,XLOK
MOVN PICX,X1
IMUL PICX,DX
SETZ X1,
XLOK: CAIL X2,20*40-1
MOVEI X2,20*40-2
CAMG X1,X2
CAMLE Y1,Y2
JRST @GRYUP
SUBM X1,X2
SUBM Y1,Y2
HRLI X1,-1(X2)
HRLI Y1,-1(Y2)
MOVE YA,Y1
YLLP: HLRZ YPIC,PICY
RTF: MOVE YPIC,ROWTAB(YPIC)
MOVEM YPIC,SCRTCH(YA)
ADD PICY,DY
AOBJN YA,YLLP
XLP: HRRZ XA,X1
HRRZ XBIT,X1
LSH XA,-5
ADD XA,[ORM XBIT,DBUF(YPIC)]
HRRM XA,TJ
ANDI XBIT,37
MOVE XBIT,BSK(XBIT)
MOVE YA,Y1
HLRZ XPIC,PICX
CTF: MOVE XPIC,COLTAB(XPIC)
TLO XPIC,YPIC ;SET UP INDEX FIELD IN BYTE PNTR
YLP: MOVE YPIC,SCRTCH(YA)
LDB T,XPIC
MOVE YPIC,SLINE(YA)
TI: TRNE T,BT ;REPLACED BY ACTUAL MASK
TJ: ORM XBIT,DBUF(YPIC) ;ADD WORD NUMBER WITHIN SCANLINE
AOBJN YA,YLP
ADD PICX,DX
AOBJN X1,XLP
JRST @GRYUP
TONUP: 0
MOVE T,ROWTAB
HRRM T,RTF1
MOVE T,COLTAB
HRRM T,CTF1
MOVN BT,PICBIT
SUBI BT,1
HRRM BT,TIH
MOVEI BT,737373
CAML X1,X2 ;PUT UP THE
EXCH X1,X2 ;PICTURE ARRY IN DD BUFFER
CAML Y1,Y2 ;RECTANGLE X1-X2, Y1-Y2
EXCH Y1,Y2 ;AS A RANDOM DOT PATTERN
HRREI XA,1(X2)
SUB XA,X1
HRREI YA,1(Y2)
SUB YA,Y1
HRLZ DX,PICWID
IDIV DX,XA
HRLZ DY,PICHIG
IDIV DY,YA
SETZB PICY,PICX
JUMPGE Y1,YLOKH ;CHECK IF LOWER AND UPPER
MOVN PICY,Y1 ;BOUNDS NEED FIXING UP
IMUL PICY,DY
SETZ Y1,
YLOKH: CAILE Y2,740
MOVEI Y2,740
JUMPGE X1,XLOKH
MOVN PICX,X1
IMUL PICX,DX
SETZ X1,
XLOKH: CAIL X2,20*40-1
MOVEI X2,20*40-2
CAMG X1,X2
CAMLE Y1,Y2
JRST @TONUP
SUBM X1,X2
SUBM Y1,Y2
HRLI X1,-1(X2)
HRLI Y1,-1(Y2)
MOVE YA,Y1
YLLPH: HLRZ YPIC,PICY
RTF1: MOVE YPIC,ROWTAB(YPIC)
MOVEM YPIC,SCRTCH(YA)
ADD PICY,DY
AOBJN YA,YLLPH
XLPH: HRRZ XA,X1
HRRZ XBIT,X1
LSH XA,-5
ADD XA,[ORM XBIT,DBUF(YPIC)]
HRRM XA,TJH
ANDI XBIT,37
MOVE XBIT,BSK(XBIT)
MOVE YA,Y1
HLRZ XPIC,PICX
CTF1: MOVE XPIC,COLTAB(XPIC)
TLO XPIC,YPIC ;SET UP INDEX FIELD IN BYTE PNTR
YLPH: MOVE YPIC,SCRTCH(YA)
LDB T,XPIC
TIH: ROT T,-5 ;REPLACED BY -PICBIT-1
MOVE YPIC,SLINE(YA)
IMULI BT,400003
CAMLE T,BT ;REPLACED BY ACTUAL MASK
TJH: ORM XBIT,DBUF(YPIC) ;ADD WORD NUMBER WITHIN SCANLINE
AOBJN YA,YLPH
ADD PICX,DX
AOBJN X1,XLPH
JRST @TONUP
;******************** SAIL INTERFACE ***********************
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
PICWID: 0
PICLIN: 0
PICHIG: 0
PICBIT: 0
PICWIZ: 0
PICSIZ: 0
COLTAB: 0
ROWTAB: 0
SETUP: 0
MOVE T,PCWD(ARRY) ;SET "GLOBALS" FOR COMPATABILITY WITH
MOVEM T,PICSIZ ;OLD FORMAT
MOVE T,LNBYA(ARRY)
MOVEM T,PICWIZ
MOVE T,BYBI(ARRY)
MOVEM T,PICBIT
MOVE T,PCLN(ARRY)
MOVEM T,PICHIG
MOVE T,LNWD(ARRY)
MOVEM T,PICLIN
MOVE T,LNBY(ARRY)
MOVEM T,PICWID
MOVE T,BPTAB(ARRY)
MOVEM T,COLTAB
MOVEI T,LINTAB(ARRY)
MOVEM T,ROWTAB
MOVE ARRY,(T)
JRST @SETUP
P←17
DEFINE FLOAT(N)
< TLC N,232000
FADR N,N >
OPDEF FIX[247000233000]
DEFINE SAVAC(N)
< IFGE N-12,{MOVEM 12,ACS12}
IFGE N-16,{MOVEM 16,ACS16}
IFGE N-17,{MOVEM 17,ACS17} >
DEFINE RESAC(N)
< IFGE N-12,{MOVE 12,ACS12}
IFGE N-16,{MOVE 16,ACS16}
IFGE N-17,{MOVE 17,ACS17} >
RETAD: 0
ACS12: 0
ACS16: 0
ACS17: 0
GOODFL: 0
BUGGFL: 0
VIDEO: POP P,RETAD ;PUT UP BITS BT (A MASK, USUALLY ONLY ONE BIT
POP P,BT ;IS ON, IF MULTIPLE BITS ARE ON, THEY ARE OR'D)
POP P,ARRY ;OF PICTURE PIC INTO DD RECTANGLE X1-X2,Y1-Y2
POP P,Y2 ; VIDEO(X1,Y1,X2,Y2,PIC,BT)
FSBR Y2,YH ;IF BT IS -1,
FMPR Y2,YSC ;PUT UP A RANDOM DOT REPRESENTATION INSTEAD
FIX Y2, ;IF BT IS -2, A HIGH QUALITY HALFTONE
POP P,X2 ;IF -3, A SLIGHTLY WORSE ONE
FSBR X2,XL
FMPR X2,XSC
FIX X2,
POP P,Y1
FSBR Y1,YH
FMPR Y1,YSC
FIX Y1,
POP P,X1
FSBR X1,XL
FMPR X1,XSC
FIX X1,
SAVAC(17)
JSR SETUP
SETZM BUGGFL
CAMN BT,[-1]
JRST [ JSR TONUP
JRST DONE ]
CAMN BT,[-2]
JRST [ SETZM GOODFL
JSR HAFUP
JRST DONE ]
CAMN BT,[-3]
JRST [ SETOM GOODFL
JSR HAFUP
JRST DONE ]
CAMN BT,[-4]
JRST [ SETOM BUGGFL
SETZM GOODFL
JSR HAFUP
JRST DONE ]
JSR GRYUP
DONE: RESAC(17)
JRST @RETAD
ARRY←5 ↔ X1←1 ↔ Y1←2 ↔ X2←3 ↔ Y2←4 ↔ BT←0 ↔ XA←6 ↔ YA←7
DX←10 ↔ DY←11 ↔ PICX←12 ↔ PICY←13 ↔ XBIT←14 ↔ XPIC←15 ↔ YPIC←16 ↔ T←17
THISS: 0
SIZS: 0
HAFUP: 0 ;HIGH QUALITY HALFTONES
MOVE T,ROWTAB
HRRM T,RTF2
MOVE T,COLTAB
HRRM T,CTF2
HRRM T,CTF2A
CAML X1,X2 ;PUT UP A HALFTONE
EXCH X1,X2 ;OF PICTURE ARRY IN DD BUFFER
CAML Y1,Y2 ;RECTANGLE X1-X2, Y1-Y2
EXCH Y1,Y2
HRREI XA,1(X2)
SUB XA,X1
HRREI YA,1(Y2)
SUB YA,Y1
HRLZ DX,PICWID
IDIV DX,XA
HRLZ DY,PICHIG
IDIV DY,YA
SETZB PICY,PICX
JUMPGE Y1,YLOK2 ;CHECK IF LOWER AND UPPER
MOVN PICY,Y1 ;BOUNDS NEED FIXING UP
IMUL PICY,DY
SETZ Y1,
YLOK2: CAILE Y2,740-1
MOVEI Y2,740-1
JUMPGE X1,XLOK2
MOVN PICX,X1
IMUL PICX,DX
SETZ X1,
XLOK2: CAIL X2,20*40-1
MOVEI X2,20*40-2
CAMG X1,X2
CAMLE Y1,Y2
JRST @HAFUP
LINA←←0 ↔ LINB←←0 ↔ HALFV←←0 ;DUMMY NAMES FOR LINE BUFFER AND 1/2 PIXEL
THIS←Y1 ↔ SIZ←X2
MOVEM THIS,THISS ;SAVE THESE
MOVEM SIZ,SIZS ;ALLOCATE CORE FOR TWO LINE BUFFERS
EXCH P,ACS17
MOVEI SIZ,2000
PUSHJ P,CORGET
HALT
ADDI THIS,2
HRRM THIS,LAAM ;SET UP LINE BUFFER REFERENCES
ADDI THIS,1
HRRM THIS,LBA
HRRM THIS,LAA
ADDI THIS,1
HRRM THIS,LAAP
HRRM THIS,LBAP
ADDI THIS,1000
HRRM THIS,LABM
ADDI THIS,1
HRRM THIS,LBB
HRRM THIS,LAB
ADDI THIS,1
HRRM THIS,LABP
HRRM THIS,LBBP
SUBI THIS,1006
SETZM (THIS)
HRL BT,THIS
HRRI BT,1(THIS)
BLT BT,1777(THIS)
EXCH THIS,THISS
MOVE SIZ,SIZS
EXCH P,ACS17
MOVEI BT,1 ;BYTE WIDTH CALCULATION
LSH BT,@PICBIT
SUBI BT,1
HRRM BT,LBH
HRRM BT,LDH
ADDI BT,1
LSH BT,-1
HLL BT,[CAIGE BT,0] ;arty bug option
SKIPE BUGGFL
HLL BT,[TRNN BT,0]
MOVEM BT,LAH
MOVEM BT,LCH
SUBM X1,X2
SUBM Y1,Y2
HRLI X1,-1(X2)
HRLI Y1,-1(Y2)
MOVE YA,Y1
YLLP2: HLRZ YPIC,PICY
RTF2: MOVE YPIC,ROWTAB(YPIC)
MOVEM YPIC,SCRTCH(YA)
ADD PICY,DY
AOBJN YA,YLLP2
XLP2: HRRZ XA,X1
HRRZ XBIT,X1
LSH XA,-5
ADD XA,[ORM XBIT,DBUF(YPIC)]
HRRM XA,TJ2
ANDI XBIT,37
MOVE XBIT,BSK(XBIT)
MOVE YA,Y1
HLRZ XPIC,PICX
CTF2: MOVE XPIC,COLTAB(XPIC)
TLO XPIC,YPIC ;SET UP INDEX FIELD IN BYTE PNTR
YLP2: MOVE YPIC,SCRTCH(YA)
LDB T,XPIC
SETZ BT,
LAA: EXCH BT,LINA(YA) ;CHANGED TO LINA
ADD BT,T
LAH: CAIGE BT,HALFV ;CHANGED TO ACTUAL 1/2 MAX PIXEL VALUE
JRST GTH
MOVE YPIC,SLINE(YA)
TJ2: ORM XBIT,DBUF(YPIC) ;ADD WORD NUMBER WITHIN SCANLINE
LBH: SUBI BT,HALFV
GTH: MOVE T,BT
ASH BT,-2
LABM: ADDM BT,LINB-1(YA) ;CHNGED TO ACTUAL ADDR-1 OF LINB BUFFER
LAB: ADDM BT,LINB(YA)
SUB T,BT
SUB T,BT
SKIPE GOODFL
JRST LAAP
ASH BT,-1
LABP: ADDM BT,LINB+1(YA)
SUB T,BT
LAAP: ADDM T,LINA+1(YA)
AOBJN YA,YLP2
;POSSIBLE PATTERNS ARE
; * 7 * 3 * 2
; 3 5 1 2 2 1 1 1 0
ADD PICX,DX
AOBJP X1,ENDXL
XLP2A: HRRZ XA,X1
HRRZ XBIT,X1
LSH XA,-5
ADD XA,[ORM XBIT,DBUF(YPIC)]
HRRM XA,TI2
ANDI XBIT,37
MOVE XBIT,BSK(XBIT)
MOVE YA,Y1
HLRZ XPIC,PICX
CTF2A: MOVE XPIC,COLTAB(XPIC)
TLO XPIC,YPIC ;SET UP INDEX FIELD IN BYTE PNTR
YLP2A: MOVE YPIC,SCRTCH(YA)
LDB T,XPIC
SETZ BT,
LBB: EXCH BT,LINB(YA) ;CHANGED TO LINA
ADD BT,T
LCH: CAIGE BT,HALFV ;CHANGED TO ACTUAL 1/2 MAX PIXEL VALUE
JRST GTH1
MOVE YPIC,SLINE(YA)
TI2: ORM XBIT,DBUF(YPIC) ;ADD WORD NUMBER WITHIN SCANLINE
LDH: SUBI BT,HALFV
GTH1: MOVE T,BT
ASH BT,-2
LAAM: ADDM BT,LINA-1(YA) ;CHNGED TO ACTUAL ADDR-1 OF LINB BUFFER
LBA: ADDM BT,LINA(YA)
SUB T,BT
SUB T,BT
SKIPE GOODFL
JRST LBBP
ASH BT,-1
LBAP: ADDM BT,LINA+1(YA)
SUB T,BT
LBBP: ADDM T,LINB+1(YA)
AOBJN YA,YLP2A
ADD PICX,DX
AOBJN X1,XLP2
ENDXL: MOVE P,ACS17
MOVE THIS,THISS
PUSHJ P,CORREL
JRST @HAFUP
PRGEND
TITLE VIDONE
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VIDONE
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ MASK←1 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ T←6 ↔ TT←7 ↔ YY←10 ↔ PWID←11
I0←13 ↔ J0←14
RETAD: 0
VIDONE: POP P,RETAD
POP P,J0
POP P,I0
POP P,MASK ;FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;PICTURE TO DD PIXELS ONE TO ONE
MOVE Y,PCLN(PIC)
ADD Y,I0
CAILE Y,741
MOVEI Y,741
SUBM I0,Y
HRLZ Y,Y
ADD Y,I0
ASH J0,-5
MOVE PWID,LNBY(PIC)
ADDI PWID,37
ASH PWID,-5
ADD PWID,J0
CAILE PWID,20
MOVEI PWID,20
SUB PWID,J0
MOVN PWID,PWID
HRLZ PWID,PWID
ADD PWID,J0
MOVE I0,LNBY(PIC)
IDIVI I0,40
SKIPN J0
MOVEI J0,40
MOVN T,J0
SETO I0,I0
SETZ J0,J0
LSHC I0,(T)
SETO I0,I0
XOR I0,J0
MOVE LBP,BPTAB(PIC)
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
YLOOP: MOVE YY,SLINE(Y)
MOVE BP,LBP
ADD LBP,LNWD(PIC)
ADD YY,PWID
SKIPA
XLOOP: MOVEM TT,DBUF-1(YY)
MOVE TT,DBUF(YY)
ILDB T,BP
TDNE T,MASK
TLC TT,400000
ILDB T,BP
TDNE T,MASK
TLC TT,200000
ILDB T,BP
TDNE T,MASK
TLC TT,100000
ILDB T,BP
TDNE T,MASK
TLC TT,40000
ILDB T,BP
TDNE T,MASK
TLC TT,20000
ILDB T,BP
TDNE T,MASK
TLC TT,10000
ILDB T,BP
TDNE T,MASK
TLC TT,4000
ILDB T,BP
TDNE T,MASK
TLC TT,2000
ILDB T,BP
TDNE T,MASK
TLC TT,1000
ILDB T,BP
TDNE T,MASK
TLC TT,400
ILDB T,BP
TDNE T,MASK
TLC TT,200
ILDB T,BP
TDNE T,MASK
TLC TT,100
ILDB T,BP
TDNE T,MASK
TLC TT,40
ILDB T,BP
TDNE T,MASK
TLC TT,20
ILDB T,BP
TDNE T,MASK
TLC TT,10
ILDB T,BP
TDNE T,MASK
TLC TT,4
ILDB T,BP
TDNE T,MASK
TLC TT,2
ILDB T,BP
TDNE T,MASK
TLC TT,1
ILDB T,BP
TDNE T,MASK
TRC TT,400000
ILDB T,BP
TDNE T,MASK
TRC TT,200000
ILDB T,BP
TDNE T,MASK
TRC TT,100000
ILDB T,BP
TDNE T,MASK
TRC TT,40000
ILDB T,BP
TDNE T,MASK
TRC TT,20000
ILDB T,BP
TDNE T,MASK
TRC TT,10000
ILDB T,BP
TDNE T,MASK
TRC TT,4000
ILDB T,BP
TDNE T,MASK
TRC TT,2000
ILDB T,BP
TDNE T,MASK
TRC TT,1000
ILDB T,BP
TDNE T,MASK
TRC TT,400
ILDB T,BP
TDNE T,MASK
TRC TT,200
ILDB T,BP
TDNE T,MASK
TRC TT,100
ILDB T,BP
TDNE T,MASK
TRC TT,40
ILDB T,BP
TDNE T,MASK
TRC TT,20
AOBJN YY,XLOOP
ANDM I0,DBUF-1(YY)
AND TT,J0
ORM TT,DBUF-1(YY)
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VIDFOR
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VIDFOR
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ T1←0 T2←1 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ T4←6 ↔ TT←7 ↔ YY←10 ↔ PWID←11
I0←13 ↔ J0←14 ↔ T8←15
RETAD: 0
VIDFOR: POP P,RETAD
POP P,J0
POP P,I0
POP P,T8
HRRM T8,BF8B
POP P,T4
HRRM T4,BF4B
POP P,T2
HRRM T2,BF2B
POP P,T1
HRRM T1,BF1B
;SUPER FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;4 BIT PICTURE TO 4 DD BUFFERS ONE TO ONE
MOVE Y,PCLN(PIC) ;ASSUMES DIGITIZER INVERTED GRAY CODE
ADD Y,I0
CAILE Y,741
MOVEI Y,741
SUB Y,I0
MOVN Y,Y ; VIDFOR(PIC[0],BF1,BF2,BF4,BF8,I0,J0)
HRLZ Y,Y
ADD Y,I0
MOVE PWID,LNBY(PIC)
ADD PWID,J0
CAILE PWID,1000
MOVEI PWID,1000
SUB PWID,J0
ASH PWID,-5
MOVN PWID,PWID
HRLZ PWID,PWID
ASH J0,-5
ADD PWID,J0
MOVE LBP,BPTAB(PIC)
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
YLOOP: MOVE YY,SLINE(Y)
MOVE BP,LBP
ADD LBP,LNWD(PIC)
ADD YY,PWID
XLOOP: HRROI T1,777762
HRROI T2,777762
HRROI T4,777762
HRROI T8,777762
FOR C←21,0,-1
{ ILDB TT,BP
TRNE TT,1
TLZ T1,1⊗C
TRNE TT,2
TLZ T2,1⊗C
TRNE TT,4
TLZ T4,1⊗C
TRNE TT,10
TLZ T8,1⊗C
}
FOR C←21,4,-1
{ ILDB TT,BP
TRNE TT,1
ANDCMI T1,1⊗C
TRNE TT,2
ANDCMI T2,1⊗C
TRNE TT,4
ANDCMI T4,1⊗C
TRNE TT,10
ANDCMI T8,1⊗C
}
BF1B: MOVEM T1,1(YY)
BF2B: MOVEM T2,2(YY)
BF4B: MOVEM T4,4(YY)
BF8B: MOVEM T8,8(YY)
AOBJN YY,XLOOP
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VID1
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VID1
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ T1←0 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ TT←7 ↔ YY←10 ↔ PWID←11
I0←13 ↔ J0←14
RETAD: 0
VID1: POP P,RETAD
POP P,J0
POP P,I0
POP P,T1
HRRM T1,BF1B
;SUPER FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;3 BIT PICTURE TO 3 DD BUFFERS ONE TO ONE
MOVE Y,PCLN(PIC) ;COMPLEMENTS REGULAR GRAY CODE
ADD Y,I0
CAILE Y,741
MOVEI Y,741
SUB Y,I0
MOVN Y,Y ; VID3(PIC[0],BF1,BF2,BF4,I0,J0)
HRLZ Y,Y
ADD Y,I0
MOVE PWID,LNBY(PIC)
ADD PWID,J0
CAILE PWID,1000
MOVEI PWID,1000
SUB PWID,J0
ASH PWID,-5
MOVN PWID,PWID
HRLZ PWID,PWID
ASH J0,-5
ADD PWID,J0
MOVE LBP,BPTAB(PIC)
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
YLOOP: MOVE YY,SLINE(Y)
MOVE BP,LBP
ADD LBP,LNWD(PIC)
ADD YY,PWID
XLOOP: HRROI T1,777762
FOR C←21,0,-1
{ ILDB TT,BP
TRNE TT,1
TLZ T1,1⊗C
}
FOR C←21,4,-1
{ ILDB TT,BP
TRNE TT,1
ANDCMI T1,1⊗C
}
BF1B: MOVEM T1,1(YY)
AOBJN YY,XLOOP
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VID3
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VID3
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ T1←0 T2←1 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ T4←6 ↔ TT←7 ↔ YY←10 ↔ PWID←11
I0←13 ↔ J0←14 ↔ T8←15
RETAD: 0
VID3: POP P,RETAD
POP P,J0
POP P,I0
POP P,T4
HRRM T4,BF4B
POP P,T2
HRRM T2,BF2B
POP P,T1
HRRM T1,BF1B
;SUPER FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;3 BIT PICTURE TO 3 DD BUFFERS ONE TO ONE
MOVE Y,PCLN(PIC) ;COMPLEMENTS REGULAR GRAY CODE
ADD Y,I0
CAILE Y,741
MOVEI Y,741
SUB Y,I0
MOVN Y,Y ; VID3(PIC[0],BF1,BF2,BF4,I0,J0)
HRLZ Y,Y
ADD Y,I0
MOVE PWID,LNBY(PIC)
ADD PWID,J0
CAILE PWID,1000
MOVEI PWID,1000
SUB PWID,J0
ASH PWID,-5
MOVN PWID,PWID
HRLZ PWID,PWID
ASH J0,-5
ADD PWID,J0
MOVE LBP,BPTAB(PIC)
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
YLOOP: MOVE YY,SLINE(Y)
MOVE BP,LBP
ADD LBP,LNWD(PIC)
ADD YY,PWID
XLOOP: HRRZI T1,000002
HRRZI T2,000002
HRROI T4,777762
FOR C←21,0,-1
{ ILDB TT,BP
TRNE TT,1
TLO T1,1⊗C
TRNE TT,2
TLO T2,1⊗C
TRNE TT,4
TLZ T4,1⊗C
}
FOR C←21,4,-1
{ ILDB TT,BP
TRNE TT,1
ORI T1,1⊗C
TRNE TT,2
ORI T2,1⊗C
TRNE TT,4
ANDCMI T4,1⊗C
}
BF1B: MOVEM T1,1(YY)
BF2B: MOVEM T2,2(YY)
BF4B: MOVEM T4,4(YY)
AOBJN YY,XLOOP
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VID4
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VID4
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ T1←0 T2←1 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ T4←6 ↔ TT←7 ↔ YY←10 ↔ PWID←11
I0←13 ↔ J0←14 ↔ T8←15
RETAD: 0
VID4: POP P,RETAD
POP P,J0
POP P,I0
POP P,T8
HRRM T8,BF8B
POP P,T4
HRRM T4,BF4B
POP P,T2
HRRM T2,BF2B
POP P,T1
HRRM T1,BF1B
;SUPER FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;4 BIT PICTURE TO 4 DD BUFFERS ONE TO ONE
MOVE Y,PCLN(PIC) ;COMPLEMENTS REGULAR GRAY CODE
ADD Y,I0
CAILE Y,741
MOVEI Y,741
SUB Y,I0
MOVN Y,Y ; VID4(PIC[0],BF1,BF2,BF4,BF8,I0,J0)
HRLZ Y,Y
ADD Y,I0
MOVE PWID,LNBY(PIC)
ADD PWID,J0
CAILE PWID,1000
MOVEI PWID,1000
SUB PWID,J0
ASH PWID,-5
MOVN PWID,PWID
HRLZ PWID,PWID
ASH J0,-5
ADD PWID,J0
MOVE LBP,BPTAB(PIC)
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
YLOOP: MOVE YY,SLINE(Y)
MOVE BP,LBP
ADD LBP,LNWD(PIC)
ADD YY,PWID
XLOOP: HRRZI T1,000002
HRRZI T2,000002
HRRZI T4,000002
HRROI T8,777762
FOR C←21,0,-1
{ ILDB TT,BP
TRNE TT,1
TLO T1,1⊗C
TRNE TT,2
TLO T2,1⊗C
TRNE TT,4
TLO T4,1⊗C
TRNE TT,10
TLZ T8,1⊗C
}
FOR C←21,4,-1
{ ILDB TT,BP
TRNE TT,1
ORI T1,1⊗C
TRNE TT,2
ORI T2,1⊗C
TRNE TT,4
ORI T4,1⊗C
TRNE TT,10
ANDCMI T8,1⊗C
}
BF1B: MOVEM T1,1(YY)
BF2B: MOVEM T2,2(YY)
BF4B: MOVEM T4,4(YY)
BF8B: MOVEM T8,10(YY)
AOBJN YY,XLOOP
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VID5
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VID5
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ T1←0 T2←1 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ T4←6 ↔ TT←7 ↔ YY←10 ↔ PWID←11
T16←I0←13 ↔ J0←14 ↔ T8←15
RETAD: 0
VID5: POP P,RETAD
POP P,J0
POP P,I0
POP P,T8
HRRM T8,BF16B
POP P,T8
HRRM T8,BF8B
POP P,T4
HRRM T4,BF4B
POP P,T2
HRRM T2,BF2B
POP P,T1
HRRM T1,BF1B
;SUPER FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;4 BIT PICTURE TO 4 DD BUFFERS ONE TO ONE
MOVE Y,PCLN(PIC) ;COMPLEMENTS REGULAR GRAY CODE
ADD Y,I0
CAILE Y,741
MOVEI Y,741
SUB Y,I0
MOVN Y,Y ; VID5(PIC[0],BF1,BF2,BF4,BF8,BF16,I0,J0)
HRLZ Y,Y
ADD Y,I0
MOVE PWID,LNBY(PIC)
ADD PWID,J0
CAILE PWID,1000
MOVEI PWID,1000
SUB PWID,J0
ASH PWID,-5
MOVN PWID,PWID
HRLZ PWID,PWID
ASH J0,-5
ADD PWID,J0
MOVE LBP,BPTAB(PIC)
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
YLOOP: MOVE YY,SLINE(Y)
MOVE BP,LBP
ADD LBP,LNWD(PIC)
ADD YY,PWID
XLOOP: HRRZI T1,000002
HRRZI T2,000002
HRRZI T4,000002
HRRZI T8,000002
HRROI T16,777762
FOR C←21,0,-1
{ ILDB TT,BP
TRNE TT,1
TLO T1,1⊗C
TRNE TT,2
TLO T2,1⊗C
TRNE TT,4
TLO T4,1⊗C
TRNE TT,10
TLO T8,1⊗C
TRNE TT,20
TLZ T16,1⊗C
}
FOR C←21,4,-1
{ ILDB TT,BP
TRNE TT,1
ORI T1,1⊗C
TRNE TT,2
ORI T2,1⊗C
TRNE TT,4
ORI T4,1⊗C
TRNE TT,10
ORI T8,1⊗C
TRNE TT,20
ANDCMI T16,1⊗C
}
BF1B: MOVEM T1,1(YY)
BF2B: MOVEM T2,2(YY)
BF4B: MOVEM T4,4(YY)
BF8B: MOVEM T8,10(YY)
BF16B: MOVEM T16,20(YY)
AOBJN YY,XLOOP
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VIDFRX
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VIDFRX
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ T1←0 T2←1 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ T4←6 ↔ TT←7 ↔ YY←10 ↔ PWID←11
YY1←I0←13 ↔ J0←14 ↔ T8←15
RETAD: 0
VIDFRX: POP P,RETAD
POP P,J0
POP P,I0
POP P,T8
HRRM T8,BF8A
HRRM T8,BF8B
POP P,T4
HRRM T4,BF4A
HRRM T4,BF4B
POP P,T2
HRRM T2,BF2A
HRRM T2,BF2B
POP P,T1
HRRM T1,BF1A
HRRM T1,BF1B
;SUPER FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;4 BIT PICTURE TO 4 DD BUFFERS ONE TO FOUR
MOVE Y,PCLN(PIC) ;ASSUMES DIGITIZER COMPLEMENTED GRAY CODE
ASH Y,1
ADD Y,I0
CAILE Y,741
MOVEI Y,741
SUB Y,I0
ASH Y,-1
MOVN Y,Y ; VIDFRX(PIC[0],BF1,BF2,BF4,BF8,I0,J0)
HRLZ Y,Y
ADD Y,I0
MOVE PWID,LNBY(PIC)
ASH PWID,1
ADD PWID,J0
CAILE PWID,1000
MOVEI PWID,1000
SUB PWID,J0
ASH PWID,-5
MOVN PWID,PWID
HRLZ PWID,PWID
ASH J0,-5
ADD PWID,J0
MOVE LBP,BPTAB(PIC)
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
YLOOP: MOVE YY,SLINE(Y)
MOVE YY1,SLINE+1(Y)
MOVE BP,LBP
ADD LBP,LNWD(PIC)
ADD YY,PWID
XLOOP: HRROI T1,777762
HRROI T2,777762
HRROI T4,777762
HRROI T8,777762
FOR C←20,0,-2
{ ILDB TT,BP
TRNE TT,1
TLZ T1,3⊗C
TRNE TT,2
TLZ T2,3⊗C
TRNE TT,4
TLZ T4,3⊗C
TRNE TT,10
TLZ T8,3⊗C
}
FOR C←20,4,-2
{ ILDB TT,BP
TRNE TT,1
ANDCMI T1,3⊗C
TRNE TT,2
ANDCMI T2,3⊗C
TRNE TT,4
ANDCMI T4,3⊗C
TRNE TT,10
ANDCMI T8,3⊗C
}
BF1A: MOVEM T1,1(YY)
BF2A: MOVEM T2,2(YY)
BF4A: MOVEM T4,4(YY)
BF8A: MOVEM T8,8(YY)
BF1B: MOVEM T1,1(YY1)
BF2B: MOVEM T2,2(YY1)
BF4B: MOVEM T4,4(YY1)
BF8B: MOVEM T8,8(YY1)
ADDI YY1,1
AOBJN YY,XLOOP
ADDI Y,1
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VIDFGX
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
ENTRY VIDFGX
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ T1←0 T2←1 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ T4←6 ↔ TT←7 ↔ YY←10 ↔ PWID←11
YY1←I0←13 ↔ BT←J0←14 ↔ T8←15
RETAD: 0
VIDFGX: POP P,RETAD
POP P,J0
POP P,I0
POP P,T8
HRRM T8,BF8A
HRRM T8,BF8B
POP P,T4
HRRM T4,BF4A
HRRM T4,BF4B
POP P,T2
HRRM T2,BF2A
HRRM T2,BF2B
POP P,T1
HRRM T1,BF1A
HRRM T1,BF1B
;SUPER FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;4 BIT PICTURE TO 4 DD BUFFERS ONE TO FOUR
MOVE Y,PCLN(PIC) ;ASSUMES DIGITIZER COMPLEMENTED GRAY CODE
ASH Y,1
ADD Y,I0
CAILE Y,741
MOVEI Y,741
SUB Y,I0
ASH Y,-1
MOVN Y,Y ; VIDFRX(PIC[0],BF1,BF2,BF4,BF8,I0,J0)
HRLZ Y,Y
ADD Y,I0
MOVE PWID,LNBY(PIC)
ASH PWID,1
ADD PWID,J0
CAILE PWID,1000
MOVEI PWID,1000
SUB PWID,J0
ASH PWID,-5
MOVN PWID,PWID
HRLZ PWID,PWID
ASH J0,-5
ADD PWID,J0
MOVEI BT,4
SUB BT,BYBI(PIC)
MOVE LBP,BPTAB(PIC)
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
YLOOP: MOVE YY,SLINE(Y)
MOVE YY1,SLINE+1(Y)
MOVE BP,LBP
ADD LBP,LNWD(PIC)
ADD YY,PWID
XLOOP: HRRZI T1,000002
HRRZI T2,000002
HRRZI T4,000002
HRRZI T8,000002
FOR C←20,0,-2
{ ILDB TT,BP
LSH TT,(BT)
TRNE TT,1
TLO T1,3⊗C
TRNE TT,2
TLO T2,3⊗C
TRNE TT,4
TLO T4,3⊗C
TRNE TT,10
TLO T8,3⊗C
}
FOR C←20,4,-2
{ ILDB TT,BP
LSH TT,(BT)
TRNE TT,1
ORI T1,3⊗C
TRNE TT,2
ORI T2,3⊗C
TRNE TT,4
ORI T4,3⊗C
TRNE TT,10
ORI T8,3⊗C
}
BF1A: MOVEM T1,1(YY)
BF2A: MOVEM T2,2(YY)
BF4A: MOVEM T4,4(YY)
BF8A: MOVEM T8,8(YY)
BF1B: MOVEM T1,1(YY1)
BF2B: MOVEM T2,2(YY1)
BF4B: MOVEM T4,4(YY1)
BF8B: MOVEM T8,8(YY1)
ADDI YY1,1
AOBJN YY,XLOOP
ADDI Y,1
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VIDFRT
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK
EXTERN CORGET,CORREL
ENTRY VIDFRT
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
P←17 ↔ T1←0 T2←1 ↔ PIC←2 ↔ Y←3 ↔ LBP←4 ↔ BP←5 ↔ T4←6 ↔ TT←7 ↔ YY←10 ↔ PWID←11
I0←13 ↔ YYD←J0←14 ↔ T8←15
RETAD: 0
VIDFRT: POP P,RETAD
POP P,J0
POP P,I0
POP P,T8
HRRM T8,BF8A
HRRM T8,BF8B
POP P,T4
HRRM T4,BF4A
HRRM T4,BF4B
POP P,T2
HRRM T2,BF2A
HRRM T2,BF2B
POP P,T1
HRRM T1,BF1A
HRRM T1,BF1B
;SUPER FAST SYNTHESIZER CONVERSION. MASKS
POP P,PIC ;4 BIT PICTURE TO 4 DD BUFFERS ONE TO ONE
MOVE Y,LNBY(PIC) ;ASSUMES REGULAR GRAY CODE, BUT TRANSPOSED
ASH Y,1
SUB Y,I0
ADDI Y,740
CAILE Y,740
MOVEI Y,740
ASH Y,-1
MOVN Y,Y ; VID4T(PIC[0],BF1,BF2,BF4,BF8,I0,J0)
HRLZ Y,Y
ADD Y,I0
MOVE PWID,PCLN(PIC)
ADD PWID,J0
CAILE PWID,1000
MOVEI PWID,1000
SUB PWID,J0
ASH PWID,-5
MOVN PWID,PWID
HRLZ PWID,PWID
ASH J0,-5
ADD PWID,J0
MOVE LBP,BPTAB(PIC) ;first byte pntr for pic
MOVE LBP,-1(LBP)
ADD LBP,LINTAB(PIC)
ADDI Y,3
YLOOP: SUBI Y,3
MOVE YY,SLINE(Y)
MOVE YYD,SLINE-1(Y)
ADD YY,PWID
ADD YYD,PWID
IBP LBP
MOVE BP,LBP
XLOOP: HRROI T1,777762 ;initialize DD buffer words
HRROI T2,777762
HRROI T4,777762
HRROI T8,777762
FOR C←21,0,-1
{ LDB TT,BP
ADD BP,LNWD(PIC)
TRNE TT,1
TLZ T1,1⊗C
TRNE TT,2
TLZ T2,1⊗C
TRNE TT,4
TLZ T4,1⊗C
TRNE TT,10
TLZ T8,1⊗C
}
FOR C←21,4,-1
{ LDB TT,BP
ADD BP,LNWD(PIC)
TRNE TT,1
ANDCMI T1,1⊗C
TRNE TT,2
ANDCMI T2,1⊗C
TRNE TT,4
ANDCMI T4,1⊗C
TRNE TT,10
ANDCMI T8,1⊗C
}
BF1A: MOVEM T1,1(YYD)
BF2A: MOVEM T2,2(YYD)
BF4A: MOVEM T4,4(YYD)
BF8A: MOVEM T8,10(YYD)
BF1B: MOVEM T1,1(YY)
BF2B: MOVEM T2,2(YY)
BF4B: MOVEM T4,4(YY)
BF8B: MOVEM T8,10(YY)
ADDI YYD,1
AOBJN YY,XLOOP
AOBJN Y,YLOOP
JRST @RETAD
PRGEND
TITLE VIDXGP
ENTRY VIDXGP
EXTERN XGEROR
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
NCOPY←10 ↔ P←17 ↔ I0←1 ↔ J0←2 ↔ Y←3 YC←4 ↔ PIC←5 ↔ A←6 ↔ PLEN←7
RETAD: 0
LIST: IOWD 2,TOP
IOWD 0,0
IOWD 2,BOT
0
TOP: 400000,,0
0
BOT: 0
400000,,0
VIDXGP:
POP P,RETAD ;treat a picture as a bit buffer for XGP output
POP P,NCOPY
POP P,PLEN
POP P,J0 ; VIDXGP(PIC,I0,J0,PLEN)
POP P,I0 ;starts I0 xgp scanlines down the page
POP P,PIC ; J0 indented right. Page is PLEN long.
HRLZ Y,I0
LSH Y,=6
MOVEM Y,TOP+1
MOVE Y,PLEN
SUB Y,PCLN(PIC)
SUB Y,I0
CAIGE Y,0
MOVEI Y,0
LSH Y,=24
MOVEM Y,BOT
MOVN Y,PCWD(PIC)
HRLZ Y,Y
HRR Y,LINTAB(PIC)
SUBI Y,1
MOVEM Y,LIST+1
ADDI J0,=36
ORI J0,10000
LSH J0,=12
ADD J0,LNWD(PIC)
SUBI J0,1
MOVE YC,PCLN(PIC)
MOVE Y,LINTAB(PIC)
YLOOP: MOVEM J0,(Y)
ADD Y,LNWD(PIC)
SOJG YC,YLOOP
FINSH1: CHNSTS 1,A
JUMPE A,.+3
IOPUSH 1,1
JRST [OUTSTR [ASCIZ \ Too many IOPUSHes (XGPUP) \] ↔ JRST BADX]
INIT 1,617 ;return if xgp not availible
SIXBIT /XGP/
0
JRST NOXG ;not available
JRST XGAV
NOXG: OUTSTR [ASCIZ / Waiting for XGP .. /]
INIT 1,1217 ;automatic wait for device, HNGTRP
SIXBIT /xgp/
0
JRST [OUTSTR [ASCIZ \ XGP trouble (INIT) \] ↔ JRST BADG]]
XGAV: OUT 1,LIST
JRST [SOJG NCOPY,XGAV ↔ JRST FIXG]
OUTSTR [ASCIZ \ XGP error: \]
SETZ 0,
MTAPE 1,0
OUTSTR @XGEROR(1)
OUTSTR [ASCIZ\
\]
BADG: RELEAS 1,
JUMPE A,.+3
IOPOP 1,1
JRST .+1
BADX: SETZ 1,
JRST @RETAD
FIXG: RELEAS 1,
JUMPE A,.+3
IOPOP 1,1
JRST .+1
SETO 1,
JRST @RETAD
PRGEND
TITLE VIDXG
ENTRY VIDXG
EXTERN XGEROR
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BMAX←←12
BPTAB←←13
LINTAB←←14
NCOPY←10 ↔ P←17 ↔ I0←1 ↔ J0←2 ↔ Y←3 YC←4 ↔ PIC←5 ↔ A←6 ↔ PLEN←7
RETAD: 0
LIST: IOWD 2,TOP
IOWD 0,0
IOWD 2,BOT
0
TOP: 400000,,0
0
BOT: 0
400000,,0
VIDXG:
POP P,RETAD ;treat a picture as a bit buffer for XGP output
POP P,NCOPY
POP P,PLEN
POP P,J0 ; VIDXGP(PIC,I0,J0,PLEN)
POP P,I0 ;starts I0 xgp scanlines down the page
POP P,PIC ; J0 indented right. Page is PLEN long.
HRLZ Y,I0
LSH Y,=6
MOVEM Y,TOP+1
MOVE Y,PLEN
SUB Y,PCLN(PIC)
SUB Y,I0
CAIGE Y,0
MOVEI Y,0
LSH Y,=24
MOVEM Y,BOT
MOVN Y,PCWD(PIC)
HRLZ Y,Y
HRR Y,LINTAB(PIC)
SUBI Y,1
MOVEM Y,LIST+1
ADDI J0,=36
ORI J0,10000
LSH J0,=12
ADD J0,LNWD(PIC)
SUBI J0,1
MOVE YC,PCLN(PIC)
MOVE Y,LINTAB(PIC)
YLOOP: MOVEM J0,(Y)
ADD Y,LNWD(PIC)
SOJG YC,YLOOP
FINSH1: CHNSTS 1,A
JUMPE A,.+3
IOPUSH 1,1
JRST [OUTSTR [ASCIZ \ Too many IOPUSHes (XGPUP) \] ↔ JRST IOPU]
INIT 1,617 ;return if xgp not availible
SIXBIT /XGP/
0
JRST NOXG ;not available
JRST XGAV
XGAV: OUT 1,LIST
JRST [SOJG NCOPY,XGAV ↔ JRST FIXG]
OUTSTR [ASCIZ \ XGP error: \]
SETZ 0,
MTAPE 1,0
OUTSTR @XGEROR(1)
OUTSTR [ASCIZ\
\]
NOXG: RELEAS 1,
JUMPE A,.+3
IOPOP 1,1
JRST .+1
IOPU: SETZ 1,
JRST @RETAD
FIXG: RELEAS 1,
JUMPE A,.+3
IOPOP 1,1
JRST .+1
SETO 1,
JRST @RETAD
PRGEND
TITLE XGEROR
ENTRY XGEROR
XGEROR: [ASCIZ \No error after all?\]
[ASCIZ \Font Compiler: No Job slots\]
[ASCIZ \Font Compiler: No response\]
[ASCIZ \Font Compiler: No response\]
[ASCIZ \Font Compiler: Illegal response\]
[ASCIZ \Interrupt level: Data missed\]
[ASCIZ \XGP Hung timeout\]
[ASCIZ \Illegal mode\]
[ASCIZ \Line too complex\]
[ASCIZ \Out of order\]
[ASCIZ \XGPSER missed\]
[ASCIZ \Page too long\]
[ASCIZ \Illegal vector parameters\]
[ASCIZ \Font compiler disappeared\]
END